import axios from '../utils/axios-config'

// 用户相关API路径前缀
// 注意：axios-config.js中的baseURL已经包含了/api前缀，所以这里只需要user部分
const API_PREFIX = '/user'

/**
 * 获取用户列表
 * @param {Object} params - 查询参数: {name, isActive, role, goal, sortBy, limit, page}
 * @returns {Promise} - 返回用户列表数据
 */
export function getUserList(params = {}) {
  console.log('获取用户列表，原始参数:', params);
  
  // 过滤掉undefined和null值的参数
  const cleanParams = Object.entries(params).reduce((acc, [key, value]) => {
    if (value !== undefined && value !== null && value !== '') {
      // 确保布尔值正确传递
      if (typeof value === 'boolean') {
        acc[key] = value.toString();
      } else {
        acc[key] = value;
      }
    }
    return acc;
  }, {});
  
  // 确保至少有基本的分页参数
  if (!cleanParams.page) cleanParams.page = 1;
  if (!cleanParams.limit) cleanParams.limit = 10;
  
  console.log('获取用户列表，清理后参数:', cleanParams);
  return axios.get(API_PREFIX, { params: cleanParams })
    .then(response => {
      console.log('获取用户列表成功，返回数据:', response.data);
      return response;
    })
    .catch(error => {
      console.error('获取用户列表失败:', error);
      console.error('错误详情:', {
        message: error.message,
        endpoint: `${API_PREFIX}`,
        params: cleanParams,
        response: error.response?.data
      });
      // 继续抛出错误以便上层处理
      throw error;
    });
}

/**
 * 获取用户详情
 * @param {string|number} id - 用户ID
 * @returns {Promise} - 返回用户详情
 */
export function getUserDetail(id) {
  return axios.get(`${API_PREFIX}/${id}`)
}

/**
 * 添加用户
 * @param {Object} data - 用户数据
 * @returns {Promise} - 添加结果
 */
export function addUser(data) {
  return axios.post(API_PREFIX, data)
}

/**
 * 更新用户信息
 * @param {string|number} id - 用户ID
 * @param {Object} data - 更新的用户数据
 * @returns {Promise} - 更新结果
 */
export function updateUser(id, data) {
  return axios.patch(`${API_PREFIX}/${id}`, data)
    .then(response => {
      console.log('更新用户信息成功:', response.data);
      return response;
    })
    .catch(error => {
      console.error('更新用户信息失败:', error);
      console.error('错误详情:', {
        message: error.message,
        userId: id,
        requestData: data,
        response: error.response?.data
      });
      throw error;
    });
}

/**
 * 删除用户
 * @param {string|number} id - 用户ID
 * @returns {Promise} - 删除结果
 */
export function deleteUser(id) {
  return axios.delete(`${API_PREFIX}/${id}/soft`)
    .then(response => {
      console.log('软删除用户成功:', response.data);
      return response;
    })
    .catch(error => {
      console.error('软删除用户失败:', error);
      console.error('错误详情:', {
        message: error.message,
        userId: id,
        response: error.response?.data
      });
      throw error;
    });
}

/**
 * 批量删除用户
 * @param {Array} ids - 用户ID数组
 * @returns {Promise} - 批量删除结果
 */
export function batchDeleteUsers(ids) {
  return axios.post(`${API_PREFIX}/batch-delete`, { ids })
}

/**
 * 获取用户统计数据 (旧接口，可考虑是否保留或移除)
 * @returns {Promise} - 返回统计数据
 */
export function getUserStats() {
  return axios.get(`${API_PREFIX}/stats`)
}

/**
 * 获取用户仪表盘统计摘要 (新接口)
 * @returns {Promise} - 返回仪表盘用户统计摘要数据
 */
export function getUserDashboardSummaryStats() {
  return axios.post(`/dashboard/user-summary-stats`, {})
    .then(response => {
      console.log('获取用户仪表盘统计摘要成功:', response.data);
      return response.data; // 通常API封装会返回 response.data
    })
    .catch(error => {
      console.error('获取用户仪表盘统计摘要失败:', error);
      console.error('错误详情:', {
        message: error.message,
        endpoint: `/dashboard/user-summary-stats`,
        response: error.response?.data
      });
      throw error;
    });
}

/**
 * 更新用户状态（激活/禁用）
 * @param {string|number} id - 用户ID
 * @param {boolean} active - 是否激活
 * @returns {Promise} - 更新结果
 */
export function updateUserStatus(id, active) {
  return axios.put(`${API_PREFIX}/${id}/status`, { active })
}

/**
 * 重置用户密码
 * @param {string|number} id - 用户ID
 * @returns {Promise} - 重置结果，包含新密码
 */
export function resetUserPassword(id) {
  return axios.post(`${API_PREFIX}/${id}/reset-password`)
}

/**
 * 上传用户头像
 * @param {File} file - 头像图片文件
 * @param {string} [userId] - 可选，管理员更新指定用户的ID
 * @returns {Promise} - 上传结果，包含新的avatarUrl
 */
export function uploadAvatar(file, userId) {
  const formData = new FormData();
  formData.append('avatar', file);

  // 如果提供了userId（管理员操作），则添加到formData中
  if (userId) {
    formData.append('userId', userId);
    console.log('[uploadAvatar] 作为管理员为用户ID上传头像:', userId);
  }

  return axios.post(`${API_PREFIX}/avatar`, formData, {
    headers: {
      'Content-Type': 'multipart/form-data'
    }
  })
  .then(response => {
    console.log('头像上传成功:', response.data);
    return response.data; // 直接返回data部分，方便调用处处理
  })
  .catch(error => {
    console.error('头像上传失败:', error);
    console.error('错误详情:', {
      message: error.message,
      response: error.response?.data
    });
    throw error;
  });
}

export default {
  getUserList,
  getUserDetail,
  addUser,
  updateUser,
  deleteUser,
  batchDeleteUsers,
  getUserStats,
  getUserDashboardSummaryStats,
  updateUserStatus,
  resetUserPassword,
  uploadAvatar
} 